(function($) {
    $.fn.pageRenderer = function(options) {
        var $page = $(this);
        var settings = {
            pageNO:1,
            pageSize:10,
            pageCount:0,
            itemTotal:0
        };
        var opt = $.extend(settings, options || {}); // 合并默认和用户配置
        if(!opt.pageNO) opt.pageNO = 1;
        opt.pageCount = parseInt(opt.itemTotal/opt.pageSize)+(opt.itemTotal%opt.pageSize==0?0:1);
        if(opt.pageNO > opt.pageCount){
            opt.pageNO = opt.pageCount;
        }

        $page.on("click",'.pageprv',function(){
            if(opt.pageNO <= 1){
                return false;
            }
            opt.pageNO = opt.pageNO - 1;
            pageshow(opt.pageNO,opt.pageCount);
        })
        $page.on("click",'.pagenxt',function(){
            if(opt.pageNO >= opt.pageCount){
                return false;
            }
            opt.pageNO = opt.pageNO + 1;
            pageshow(opt.pageNO,opt.pageCount);
        })
        $page.on("click",'a.pgno',function(){
            opt.pageNO = Number($(this).text());
            pageshow(opt.pageNO,opt.pageCount);
        })

        function pageshow(cp,tp){
            if(cp <= 0 || tp > opt.pageCount){
                return false;
            }
            var sp = cp - 2;//startpage
            var ep = cp + 2;//endpage
            var eoff = ep - tp;//tp:totalpage
            if(eoff>0){
                sp = sp - eoff;
            }
            if(sp<=0){
                ep = ep -sp + 1;
            }
            var str = '';
            if(cp != 1)
                str = str + '<a href="#" class="first pageprv"><span class="pagearr">&lt;</span></a>'
            else
                str = str + '<a href="#" class="first pageprv z-dis"><span class="pagearr">&lt;</span></a>'
            for(var i= sp;i<=ep;i++){
                if(i>0&& i<=tp){
                    if(i == cp)
                        str = str + '<a href="#" class="pgno z-crt">'+i+'</a>';
                    else
                        str = str + '<a href="#" class="pgno">'+i+'</a>';
                }
            }

            if(cp != tp)
                str = str + '<a href="#" class="last pagenxt"><span class="pagearr">&gt;</span></a>';
            else
                str = str + '<a href="#" class="last pagenxt z-dis"><span class="pagearr">&gt;</span></a>';
            $page.html(str);
        }

        // 这里return也是为了保证链式调用
        // 并且each方法会遍历所有DOM对象，使得我们可以单个处理包装集中的所有DOM对象
        return this.each(function() {
            // 这里的this是一个DOM对象
            pageshow(opt.pageNO,opt.pageCount);
        });
    }
})(jQuery);